/*
 * 短信开放平台
 * 签名说明 Md5(header+data)
 * 1. 获取令牌签名参数
      IDictionary<string, string> parameters = new Dictionary<string, string>
      {
         { \"timestamp\", timestamp },
         { \"nonce\", nonce },
         { \"companyNo\", companyNo },
         { \"loginName\", loginName }
      };
 * 2. POST、PUT和DELETE 请求时签名参数
      IDictionary<string, string> parameters = new Dictionary<string, string>
      {
         { \"timestamp\", timestamp },
         { \"nonce\", nonce },
         { \"companyNo\", companyNo },   
         { \"token\", token },
         { \"data\", payload }
      };
 * 3. get 请求时签名参数
      IDictionary<string, string> parameters = new Dictionary<string, string>
      {
         { \"timestamp\", timestamp },
         { \"nonce\", nonce },  
         { \"companyNo\", companyNo },   
         { \"token\", token }    
         { \"data\", payload }  
      }; 
      foreach (string key in HttpContext.Current.Request.QueryString)
      {
         if (!string.IsNullOrEmpty(key))        
         {          
            parameters.Add(key, HttpContext.Current.Request.QueryString[key]);        
         }
      }
 * 4. 获取待签名字符串     string preSignStr = SignatureHelper.GetSignContent(parameters); //参见附件 SignatureHelper.cs   
 * 5. 证书鉴权     bool result = RSAHelper.VerifyData(publicKey, preSignStr, signature);// 参见附件 RSAHelper.cs    
 * 6. Token鉴权     bool result = SignatureHelper.VeryfySign(parameters, signature, Encoding.UTF8);参见附件 SignatureHelper.cs 
 *
 * OpenAPI spec version: 1.0.0
 * 
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */


package smsapi;

import java.util.Map;
import java.util.List;

/**
 * Callback for asynchronous API call.
 *
 * @param <T> The return type
 */
public interface ApiCallback<T> {
    /**
     * This is called when the API call fails.
     *
     * @param e The exception causing the failure
     * @param statusCode Status code of the response if available, otherwise it would be 0
     * @param responseHeaders Headers of the response if available, otherwise it would be null
     */
    void onFailure(ApiException e, int statusCode, Map<String, List<String>> responseHeaders);

    /**
     * This is called when the API call succeeded.
     *
     * @param result The result deserialized from response
     * @param statusCode Status code of the response
     * @param responseHeaders Headers of the response
     */
    void onSuccess(T result, int statusCode, Map<String, List<String>> responseHeaders);

    /**
     * This is called when the API upload processing.
     *
     * @param bytesWritten bytes Written
     * @param contentLength content length of request body
     * @param done write end
     */
    void onUploadProgress(long bytesWritten, long contentLength, boolean done);

    /**
     * This is called when the API downlond processing.
     *
     * @param bytesRead bytes Read
     * @param contentLength content lenngth of the response
     * @param done Read end
     */
    void onDownloadProgress(long bytesRead, long contentLength, boolean done);
}
